package com.liarjo.mywebsiteapi.admin.util;

import org.apache.ibatis.logging.stdout.StdOutImpl;

public class CustomMyBatisLogger extends StdOutImpl {
    private String lastSql; // 用于保存上一条 SQL 语句
    private String lastParameters; // 用于保存上一条 SQL 的参数

    public CustomMyBatisLogger(String clazz) {
        super(clazz);
    }

    @Override
    public void debug(String s) {
        // 判断是否是 SQL 语句
        if (s.startsWith("==>  Preparing:")) {
            lastSql = s.substring("==>  Preparing:".length()).trim();
        }
        // 判断是否是参数
        else if (s.startsWith("==> Parameters:")) {
            lastParameters = s.substring("==> Parameters:".length()).trim();
            // 打印完整的 SQL 语句
            printCompleteSql();
        } else {
            // 其他日志直接打印
            System.out.println("Custom MyBatis Log: " + s);
        }
    }

    private void printCompleteSql() {
        if (lastSql != null && lastParameters != null) {
            // 将参数值替换到 SQL 语句中
            String completeSql = replaceParameters(lastSql, lastParameters);
            System.out.println("Custom MyBatis Log: Complete SQL: " + completeSql);
            // 清空缓存
            lastSql = null;
            lastParameters = null;
        }
    }

    private String replaceParameters(String sql, String parameters) {
        // 将参数值替换到 SQL 语句中
        String[] params = parameters.split(", ");
        for (String param : params) {
            sql = sql.replaceFirst("\\?", param);
        }
        return sql;
    }
}
